home *** CD-ROM | disk | FTP | other *** search
/ Penthouse: Select a Pet 2 / Penthouse Select A Pet II.iso / mac / SETUP.MST < prev    next >
Text File  |  1995-05-10  |  29KB  |  796 lines

  1. rem Required to interface with MSSETUP DLL's
  2. rem -------------------------------------------------
  3. '$INCLUDE 'setupapi.inc'
  4. '$INCLUDE 'msdetect.inc'
  5.  
  6.  
  7. rem Dialog box id's
  8. rem ---------------
  9.     CONST NUKEOLD       = 101          ''Warning for older version
  10.     CONST OLDMESS       = 102          ''Modeless dialog for old versions
  11.  
  12.     CONST DESTPATH      = 300          ''Gets destination path
  13.     CONST EXITQUIT      = 600          ''Exits on user request
  14.     CONST EXITSUCCESS   = 700          ''Exits when install is done
  15.     CONST EXITDEINSTOK  = 6601         ''Exits when uninstall is done
  16.     CONST ASKSETUPTYPE  = 6603          ''Gets setup options
  17.     CONST TOOBIG        = 6300         ''Not enough space on target disk error
  18.     CONST BADPATH       = 6400         ''Bad destination path error
  19.     CONST BADWINDOWS    = 6500         ''Wrong Windows release
  20.     CONST BADCOLORS     = 6550         ''Not in 256 colors
  21.     CONST EXITFAILURE   = 6600         ''Exits on error
  22.     CONST COPYINGFILES  = 6602         ''Displays message "Copying Files..."
  23.  
  24.  
  25. rem String id's
  26. rem -----------
  27.     CONST STR_UTILITY   = 1024         ''Utility
  28.     CONST STR_GROUP     = 1025         ''Program Manager group
  29.     CONST STR_TITLE     = 1026         ''Installer Title
  30.     CONST STR_MSG1      = 1027         ''Version error message part 1
  31.     CONST STR_MSG2      = 1028         ''Version error message part 2
  32.     CONST STR_WARNING   = 1029         ''Warning
  33.     CONST STR_README    = 1030         ''Read Me
  34.     CONST STR_PROGRAM   = 1031         ''Program Manager program (for group)
  35.  
  36.  
  37. rem Miscellaneous Constants
  38. rem -----------------------
  39.     CONST NOLOGO = 1                   ''Dummy NULL bitmap (must be 1)
  40.     CONST LOGO = 2                     ''Background bitmap
  41.     CONST NOSPACE = 1                  ''No space to complete install
  42.     CONST INSTALLOK = 2                ''Install completed OK
  43.     CONST INSTALLFAILED = 3            ''Install failed for some reason
  44.     CONST UNINSTALLOK = 4              ''Uninstall completed OK
  45.     CONST FILES_REMOVED = 1
  46.     CONST FILES_SKIPPED = 2
  47.  
  48.  
  49. rem Global Variables
  50. rem ----------------
  51.     GLOBAL MYSYSDIR$
  52.     GLOBAL MYWINDIR$
  53.     GLOBAL SOURCE$                     ''Source directory
  54.     GLOBAL DEST$                       ''Default destination directory
  55.     GLOBAL SETUPTYPE$                  ''Setup type (Local, Client, Server)
  56.     GLOBAL LEANINST$                   ''Setup type (Local, Client, Server)
  57.     GLOBAL PREFINST$                   ''Setup type (Local, Client, Server)
  58.     GLOBAL FULLINST$                   ''Setup type (Local, Client, Server)
  59.     GLOBAL QTWDIR$                     ''QTW directory
  60.     GLOBAL CUIDLL$                     ''User interface DLL
  61.     GLOBAL ENUDLL$
  62.     GLOBAL SETUPPATH$                  ''Setup destination path
  63.     GLOBAL HELPPROC$                   ''Help dialog procedure
  64.     GLOBAL EXTRACOSTS$                 ''List of extra costs to add per drive
  65.     GLOBAL APPNEEDS$                   ''Disk space costs per drive
  66.     GLOBAL SECTIONKEY$                 ''INF file section key
  67.     GLOBAL SUCCESS%                    ''Installation completion code
  68.  
  69.  
  70. rem Initialize global vriables
  71. rem --------------------------
  72.     LEANINST$       = "1"
  73.     PREFINST$       = "2"
  74.     FULLINST$       = "3"
  75.     SETUPPATH$      = "C:\PETCD"
  76.     MYSYSDIR$       = GetWindowsSysDir
  77.     MYWINDIR$       = GetWindowsDir
  78.     SOURCE$         = GetSymbolValue("STF_SRCDIR")
  79.  
  80. REM FOR TESTING ONLY
  81. REM SOURCE$ = "D:\"
  82.  
  83.     DEST$           = SETUPPATH$
  84.     SUCCESS%        = INSTALLFAILED
  85.     EXTRACOSTS$     = "ExtraCosts"
  86.     APPNEEDS$       = "AppNeeds"
  87.     SECTIONKEY$     = "SectionKey"
  88.  
  89.     FOR i% = 1 TO 26 STEP 1
  90.         AddListItem EXTRACOSTS$, "16384"
  91.     NEXT i%
  92.  
  93.  
  94. rem Get name of localized user interface dialogs
  95. rem --------------------------------------------
  96.     CUIDLL$ = "setup.DLL"
  97.     ENUDLL$ = "SETUPENU.DLL"
  98.  
  99.  
  100. rem Subroutines and Functions
  101. rem -------------------------
  102.     DECLARE FUNCTION Install AS INTEGER
  103.     DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  104.     DECLARE FUNCTION GetDLLVersion LIB "setup.dll" (szDLL$) AS INTEGER
  105.     DECLARE FUNCTION HideCriticalDirectory LIB "setup.dll" (szDir$) AS INTEGER
  106.     DECLARE FUNCTION Has256Colors LIB "setup.dll" (hinst%) AS INTEGER
  107.     DECLARE FUNCTION GetResourceString LIB "setup.dll" (szResource$, idString%) AS INTEGER
  108.     DECLARE FUNCTION StartCustomSetup LIB "setup.dll" (hinst%, hwnd%) AS INTEGER
  109.     DECLARE FUNCTION StopCustomSetup LIB "setup.dll" (hinst%, hwnd%) AS INTEGER
  110.     DECLARE FUNCTION MyDeleteGroup LIB "setup.dll" (hwnd%) AS INTEGER
  111.     DECLARE FUNCTION MyRemoveDir LIB "setup.dll" (szDir$) AS INTEGER
  112.     DECLARE FUNCTION BlastFilesToTarget LIB "setup.dll" (szSource$, szDest$, sMode%) AS INTEGER
  113.     DECLARE FUNCTION MyMessageBox LIB "setup.dll" (hinst%, hwnd%, sMode%, pszStatus as POINTER TO INTEGER) AS INTEGER
  114.  
  115.     DECLARE FUNCTION CheckForOld AS INTEGER
  116.     DECLARE FUNCTION CheckForOldPETCD1 AS INTEGER
  117.     DECLARE FUNCTION CheckForOldPHI AS INTEGER
  118.     DECLARE FUNCTION RemoveOldQTFiles (FilePath$) AS INTEGER
  119.     DECLARE FUNCTION CheckForSpace (DrivePath$) AS INTEGER
  120.  
  121.  
  122. rem Initialize custom setup logic
  123. rem -----------------------------
  124.     i% = GetResourceString (CUIDLL$, STR_TITLE)
  125.     SetTitle GetSymbolValue ("ResourceString")
  126.     i% = StartCustomSetup (HinstFrame(), HwndFrame ())
  127.     i% = SetBeepingMode(1)
  128.  
  129.  
  130. rem Make sure that we are running on Windows 3.1 or better
  131. rem ------------------------------------------------------
  132.     IF GetWindowsMajorVersion() < 3 THEN
  133.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  134.        UIPop 1
  135.        GOTO CLEANUP
  136.     END IF
  137.  
  138.     IF (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion() < 10) THEN
  139.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  140.        UIPop 1
  141.        GOTO CLEANUP
  142.     END IF
  143.  
  144.  
  145. rem Make sure that we are running on a 386 or better
  146. rem ------------------------------------------------
  147.     IF GetWinFlags() AND 2 THEN
  148.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  149.        UIPop 1
  150.        GOTO CLEANUP
  151.     END IF
  152.  
  153.  
  154. rem Find and read the .INF file
  155. rem ---------------------------
  156.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  157.  
  158.     IF szInf$ = "" THEN
  159.        szTemp$ = GetSymbolValue("STF_SRCDIR")
  160.        szInf$ = szTemp$ + "PETCD.INF"
  161.     END IF
  162.  
  163.     ReadInfFile szInf$
  164.  
  165.  
  166. rem Estimate the cost of the install
  167. rem --------------------------------
  168.     ListSym$ = APPNEEDS$
  169.     drive$ = MID$("C:\", 1, 1)
  170.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  171.  
  172.     AddSectionFilesToCopyList "PetCD", SOURCE$, "C:\"
  173.  
  174.     AddSectionFilesToCopyList "WINDIR", SOURCE$, "C:\"
  175.     AddSectionFilesToCopyList "SYSDIR", SOURCE$, "C:\"
  176.  
  177.     AddSectionFilesToCopyList "FromCDLean", SOURCE$, "C:\"
  178.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  179.     LeanCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  180.     SetSymbolValue "QuickCost", STR$(LeanCost& / 100000)
  181.  
  182.     AddSectionFilesToCopyList "FromCDPref", SOURCE$, "C:\"
  183.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  184.     PrefCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  185.     SetSymbolValue "PartialCost", STR$(PrefCost& / 100000)
  186.  
  187.     AddSectionFilesToCopyList "FromCDFull", SOURCE$, "C:\"
  188.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  189.     FullCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  190.     SetSymbolValue "FullCost", STR$(FullCost& / 100000)
  191.  
  192.     ClearCopyList
  193.  
  194. rem Get the setup type: Install or uninstall
  195. rem ----------------------------------------
  196. ITYPE:
  197.     SetSymbolValue "RadioDefault", SETUPTYPE$
  198.  
  199. ITYPEL1:
  200.     sz$ = UIStartDlg(CUIDLL$, ASKSETUPTYPE, "FRadioDlgProc", 0, "")
  201.  
  202.     SETUPTYPE$ = GetSymbolValue("ButtonChecked")
  203.  
  204.     IF sz$ = "CONTINUE" THEN
  205.        UIPop 1
  206.  
  207. rem Uninstall option selected
  208. rem -------------------------
  209.     ELSEIF sz$ = "BACK" THEN
  210.        UIPop 1
  211.        GOSUB KILLFILES
  212.        RemoveIniSection "WIN.INI", "PetCD", cmoNone
  213.        i% = MyDeleteGroup (HwndFrame ())
  214.        SUCCESS% = UNINSTALLOK
  215.        GOTO UNINSTALLED
  216.  
  217.     ELSEIF sz$ = "REACTIVATE" THEN
  218.        GOTO ITYPEL1
  219.  
  220.     ELSE
  221.        GOSUB ASKQUIT
  222.        GOTO ITYPE
  223.  
  224.     END IF
  225.  
  226.  
  227. rem Get the destination path; if it's bad, display an error
  228. rem ----------------------------------------------------------------
  229. GETPATH:
  230.     SetSymbolValue "EditTextIn", DEST$
  231.     SetSymbolValue "EditFocus", "END"
  232.  
  233. GETPATHL1:
  234.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  235.  
  236.     DEST$ = GetSymbolValue("EditTextOut")
  237.  
  238.     IF sz$ = "CONTINUE" THEN
  239.        IF IsDirWritable(DEST$) = 0 THEN
  240.           GOSUB BADPATH
  241.           GOTO GETPATHL1
  242.        END IF
  243.  
  244.        UIPop 1
  245.  
  246.     ELSEIF sz$ = "REACTIVATE" THEN
  247.        GOTO GETPATHL1
  248.  
  249.     ELSE
  250.        GOSUB ASKQUIT
  251.        GOTO GETPATH
  252.  
  253.     END IF
  254.  
  255. rem Perform actual installation
  256. rem ---------------------------
  257. INSTALL:
  258.  
  259.     j% = CheckForOld()
  260.  
  261.     SUCCESS% = Install
  262.  
  263.     IF SUCCESS% = NOSPACE THEN
  264.        GOSUB TOOBIG
  265.        GOTO GETPATH
  266.     END IF
  267.  
  268. rem De-installation completed
  269. rem -------------------------
  270. UNINSTALLED:
  271.  
  272. rem When done, issue dialog
  273. rem -----------------------
  274. QUIT:
  275.     IF SUCCESS% = INSTALLOK THEN
  276.  
  277.     rem Put pointers to key data in Private Profile file
  278.     rem ------------------------------------------------
  279.        RemoveIniKey MakePath(DEST$,"BIN\PetCD.INI"), "DIRECTORIES", "HDRoot", cmoNone
  280.        CreateIniKeyValue MakePath(DEST$,"BIN\PetCD.INI"), "DIRECTORIES", "HDRoot", DEST$, cmoNone
  281.        RemoveIniKey MakePath(DEST$,"BIN\PetCD.INI"), "DIRECTORIES", "CDDrive", cmoNone
  282.        CDDRIVE$ = MID$(SOURCE$, 1, 2)
  283.        CreateIniKeyValue MakePath(DEST$,"BIN\PetCD.INI"), "DIRECTORIES", "CDDrive", CDDRIVE$, cmoNone
  284.  
  285.        sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS, "FInfo0DlgProc", 0, "")
  286.     ELSEIF SUCCESS% = UNINSTALLOK THEN
  287.        sz$ = UIStartDlg(CUIDLL$, EXITDEINSTOK, "FInfo0DlgProc", 0, "")
  288.     ELSE
  289.        sz$ = UIStartDlg(CUIDLL$, EXITFAILURE, "FInfo0DlgProc", 0, "")
  290.     END IF
  291.     UIPop 1
  292.  
  293. rem Clean up all processing
  294. rem -----------------------
  295. CLEANUP:
  296.  
  297.     i% = StopCustomSetup (HinstFrame(), HwndFrame ())
  298.  
  299.     END
  300.  
  301.  
  302. rem ASKQUIT: The user requested quit; does (s)he really want to?
  303. rem ------------------------------------------------------------
  304. ASKQUIT:
  305.     sz$ = UIStartDlg(CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  306.     UIPop 1
  307.     IF sz$ = "CONTINUE" THEN
  308.        RETURN
  309.     END IF
  310.     GOTO CLEANUP
  311.  
  312.  
  313. rem BADPATH: The user entered an invalid destination directory
  314. rem ----------------------------------------------------------
  315. BADPATH:
  316.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  317.     IF sz$ = "REACTIVATE" THEN
  318.        GOTO BADPATH
  319.     END IF
  320.     UIPop 1
  321.  
  322.     RETURN
  323.  
  324.  
  325. rem TOOBIG: The source files won't fit on the requested destination disk
  326. rem --------------------------------------------------------------------
  327. TOOBIG:
  328.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  329.     IF sz$ = "REACTIVATE" THEN
  330.        GOTO TOOBIG
  331.     END IF
  332.     UIPop 1
  333.  
  334.     RETURN
  335.  
  336. rem KILLFILES: Remove PetCD files from the host system
  337. rem ------------------------------------------------------
  338. KILLFILES:
  339.  
  340.     LOCATION$ = GetIniKeyString("WIN.INI", "PetCD", "PetCDDir")
  341.  
  342.     MOVDEST$ = LOCATION$ + "\" + "MOVIES"
  343.     SNGDEST$ = LOCATION$ + "\" + "SONGS"
  344.     BINDEST$ = LOCATION$ + "\" + "BIN"
  345.  
  346.     PICDEST$ = LOCATION$ + "\" + "PICTURES"
  347.  
  348.     PICDIR_COMMON$ = PICDEST$ + "\" + "COMMON"
  349.     PICDIR_COMMON_BUTTONS$ = PICDEST$ + "\" + "COMMON" + "\" + "BUTTONS"
  350.     PICDIR_HELPS$ = PICDEST$ + "\" + "HELPS"
  351.     PICDIR_HELPS_ARROWS$ = PICDEST$ + "\" + "HELPS" + "\" + "ARROWS"
  352.     PICDIR_QUERYSAV$ = PICDEST$ + "\" + "QUERYSAV"
  353.     PICDIR_QUERYSAV_BUTTONS$ = PICDEST$ + "\" + "QUERYSAV" + "\" + "BUTTONS"
  354.     PICDIR_SCNSAVER$ = PICDEST$ + "\" + "SCNSAVER"
  355.  
  356.     PICDIR_SCREEN0$ = PICDEST$ + "\" + "SCREEN0"
  357.     PICDIR_SCREEN0_BUTTONS$ = PICDEST$ + "\" + "SCREEN0" + "\" + "BUTTONS"
  358.  
  359.     PICDIR_SCREEN1$ = PICDEST$ + "\" + "SCREEN1"
  360.     PICDIR_SCREEN1_BUTTONS$ = PICDEST$ + "\" + "SCREEN1" + "\" + "BUTTONS"
  361.     PICDIR_SCREEN1_LIPS$ = PICDEST$ + "\" + "SCREEN1" + "\" + "LIPS"
  362.     PICDIR_SCREEN1_SLIDERS$ = PICDEST$ + "\" + "SCREEN1" + "\" + "SLIDERS"
  363.  
  364.     PICDIR_SCREEN2$ = PICDEST$ + "\" + "SCREEN2"
  365.     PICDIR_SCREEN2_BUTTONS$ = PICDEST$ + "\" + "SCREEN2" + "\" + "BUTTONS"
  366.     PICDIR_SCREEN2_ARROWS$ = PICDEST$ + "\" + "SCREEN2" + "\" + "ARROWS"
  367.     PICDIR_SCREEN2_SLIDERS$ = PICDEST$ + "\" + "SCREEN2" + "\" + "SLIDERS"
  368.  
  369.     PICDIR_SCREEN3$ = PICDEST$ + "\" + "SCREEN3"
  370.     PICDIR_SCREEN3_BUTTONS$ = PICDEST$ + "\" + "SCREEN3" + "\" + "BUTTONS"
  371.     PICDIR_SCREEN3_ARROWS$ = PICDEST$ + "\" + "SCREEN3" + "\" + "ARROWS"
  372.  
  373.     rem Note: Calling BlastFilesToTarget with 2 kills files
  374.     i% = BlastFilesToTarget (MOVDEST$, MOVDEST$, 2)
  375.     i% = BlastFilesToTarget (SNGDEST$, SNGDEST$, 2)
  376.     i% = BlastFilesToTarget (BINDEST$, BINDEST$, 2)
  377.  
  378.     i% = BlastFilesToTarget (PICDIR_COMMON_BUTTONS$, PICDIR_COMMON_BUTTONS$, 2)
  379.     i% = BlastFilesToTarget (PICDIR_HELPS$, PICDIR_HELPS$, 2)
  380.     i% = BlastFilesToTarget (PICDIR_HELPS_ARROWS$, PICDIR_HELPS_ARROWS$, 2)
  381.     i% = BlastFilesToTarget (PICDIR_QUERYSAV$, PICDIR_QUERYSAV$, 2)
  382.     i% = BlastFilesToTarget (PICDIR_QUERYSAV_BUTTONS$, PICDIR_QUERYSAV_BUTTONS$, 2)
  383.     i% = BlastFilesToTarget (PICDIR_SCNSAVER$, PICDIR_SCNSAVER$, 2)
  384.  
  385.     i% = BlastFilesToTarget (PICDIR_SCREEN0$, PICDIR_SCREEN0$, 2)
  386.     i% = BlastFilesToTarget (PICDIR_SCREEN0_BUTTONS$, PICDIR_SCREEN0_BUTTONS$, 2)
  387.  
  388.     i% = BlastFilesToTarget (PICDIR_SCREEN1$, PICDIR_SCREEN1$, 2)
  389.     i% = BlastFilesToTarget (PICDIR_SCREEN1_BUTTONS$, PICDIR_SCREEN1_BUTTONS$, 2)
  390.     i% = BlastFilesToTarget (PICDIR_SCREEN1_LIPS$, PICDIR_SCREEN1_LIPS$, 2)
  391.     i% = BlastFilesToTarget (PICDIR_SCREEN1_SLIDERS$, PICDIR_SCREEN1_SLIDERS$, 2)
  392.  
  393.     i% = BlastFilesToTarget (PICDIR_SCREEN2$, PICDIR_SCREEN2$, 2)
  394.     i% = BlastFilesToTarget (PICDIR_SCREEN2_BUTTONS$, PICDIR_SCREEN2_BUTTONS$, 2)
  395.     i% = BlastFilesToTarget (PICDIR_SCREEN2_ARROWS$, PICDIR_SCREEN2_ARROWS$, 2)
  396.     i% = BlastFilesToTarget (PICDIR_SCREEN2_SLIDERS$, PICDIR_SCREEN2_SLIDERS$, 2)
  397.  
  398.     i% = BlastFilesToTarget (PICDIR_SCREEN3$, PICDIR_SCREEN3$, 2)
  399.     i% = BlastFilesToTarget (PICDIR_SCREEN3_BUTTONS$, PICDIR_SCREEN3_BUTTONS$, 2)
  400.     i% = BlastFilesToTarget (PICDIR_SCREEN3_ARROWS$, PICDIR_SCREEN3_ARROWS$, 2)
  401.  
  402.     rem Note: RemoveDir doesn't seem to work, so we use our own function
  403.     rem RemoveDir LOCATION$ + "\", cmoForce
  404.     i% = MyRemoveDir (MOVDEST$)
  405.     i% = MyRemoveDir (SNGDEST$)
  406.     i% = MyRemoveDir (BINDEST$)
  407.  
  408.     i% = MyRemoveDir (PICDIR_COMMON_BUTTONS$)
  409.     i% = MyRemoveDir (PICDIR_COMMON$)
  410.     i% = MyRemoveDir (PICDIR_HELPS_ARROWS$)
  411.     i% = MyRemoveDir (PICDIR_HELPS$)
  412.     i% = MyRemoveDir (PICDIR_QUERYSAV_BUTTONS$)
  413.     i% = MyRemoveDir (PICDIR_QUERYSAV$)
  414.     i% = MyRemoveDir (PICDIR_SCNSAVER$)
  415.  
  416.     i% = MyRemoveDir (PICDIR_SCREEN0_BUTTONS$)
  417.     i% = MyRemoveDir (PICDIR_SCREEN0$)
  418.  
  419.     i% = MyRemoveDir (PICDIR_SCREEN1_BUTTONS$)
  420.     i% = MyRemoveDir (PICDIR_SCREEN1_LIPS$)
  421.     i% = MyRemoveDir (PICDIR_SCREEN1_SLIDERS$)
  422.     i% = MyRemoveDir (PICDIR_SCREEN1$)
  423.  
  424.     i% = MyRemoveDir (PICDIR_SCREEN2_BUTTONS$)
  425.     i% = MyRemoveDir (PICDIR_SCREEN2_ARROWS$)
  426.     i% = MyRemoveDir (PICDIR_SCREEN2_SLIDERS$)
  427.     i% = MyRemoveDir (PICDIR_SCREEN2$)
  428.  
  429.     i% = MyRemoveDir (PICDIR_SCREEN3_BUTTONS$)
  430.     i% = MyRemoveDir (PICDIR_SCREEN3_ARROWS$)
  431.     i% = MyRemoveDir (PICDIR_SCREEN3$)
  432.  
  433.     i% = MyRemoveDir (PICDEST$)
  434.     i% = MyRemoveDir (LOCATION$)
  435.  
  436.     RETURN
  437.  
  438. rem Install: Perform actual installation
  439. rem ------------------------------------
  440. FUNCTION Install STATIC AS INTEGER
  441.  
  442.     DIM Status as INTEGER
  443.  
  444.     rem Create the destination directory
  445.     rem --------------------------------
  446.         CreateDir DEST$, cmoNone
  447.  
  448.     rem Build the copy list
  449.     rem -------------------
  450.         AddSectionFilesToCopyList "PetCD", SOURCE$, DEST$
  451.  
  452.         AddSectionFilesToCopyList "SYSDIR", SOURCE$, MYSYSDIR$
  453.         AddSectionFilesToCopyList "WINDIR", SOURCE$, MYWINDIR$
  454.  
  455.         IF SETUPTYPE$ = LEANINST$ THEN
  456.            AddSectionFilesToCopyList "FromCDLean", SOURCE$, DEST$
  457.         ELSEIF SETUPTYPE$ = PREFINST$ THEN
  458.            AddSectionFilesToCopyList "FromCDLean", SOURCE$, DEST$
  459.            AddSectionFilesToCopyList "FromCDPref", SOURCE$, DEST$
  460.         ELSEIF SETUPTYPE$ = FULLINST$ THEN
  461.            AddSectionFilesToCopyList "FromCDLean", SOURCE$, DEST$
  462.            AddSectionFilesToCopyList "FromCDPref", SOURCE$, DEST$
  463.            AddSectionFilesToCopyList "FromCDFull", SOURCE$, DEST$
  464.         END IF
  465.  
  466.     rem Check that we have enough free space to perform the install
  467.     rem -----------------------------------------------------------
  468.         ListSym$ = APPNEEDS$
  469.         StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  470.  
  471.         drive$ = MID$(DEST$, 1, 1)
  472.         ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  473.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  474.         free& = GetFreeSpaceForDrive(drive$)
  475.  
  476.         IF cost& >= free& THEN
  477.            Install = NOSPACE
  478.            EXIT FUNCTION
  479.         END IF
  480.  
  481.     rem Copy all the files from the source to the destination
  482.     rem -----------------------------------------------------
  483.         CopyFilesInCopyList
  484.  
  485.     rem Update WIN.INI and SYSTEM.INI
  486.     rem -----------------------------
  487.         CreateIniKeyValue "WIN.INI", "Extensions", "mov", MakePath(DEST2$,"player.exe") + " ^.mov", cmoOverwrite
  488.         CreateIniKeyValue "WIN.INI", "Extensions", "pic", MakePath(DEST2$,"viewer.exe") + " ^.pic", cmoOverwrite
  489.         CreateIniKeyValue "WIN.INI", "MCI Extensions", "mov", "QTWVideo", cmoOverwrite
  490.         CreateIniKeyValue "WIN.INI", "MCI Extensions", "pic", "QTWVideo", cmoOverwrite
  491.         CreateIniKeyValue "WIN.INI", "MCI Extensions", "jpg", "QTWVideo", cmoOverwrite
  492.  
  493.     rem Update Registration Database
  494.     rem ----------------------------
  495. rem     RUN MakePath(DEST2$, "player.exe") + " install"
  496. rem     RUN MakePath(DEST2$, "viewer.exe") + " install"
  497.  
  498.     rem Update old versions of PHI and PETCD1 if ID'd
  499.     rem ---------------------------------------------
  500.        j% = CheckForOldPETCD1()
  501.        j% = CheckForOldPHI()
  502.  
  503.     rem Create a Program Manager group and items
  504.     rem ----------------------------------------
  505.         i% = GetResourceString (CUIDLL$, STR_GROUP)
  506.         GROUP$ = GetSymbolValue ("ResourceString")
  507.         CreateProgmanGroup GROUP$, "", cmoNone
  508.  
  509.         i% = GetResourceString (CUIDLL$, STR_PROGRAM)
  510.         CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), MakePath(DEST$,"BIN\PETCD.EXE"), "", cmoOverwrite
  511.  
  512.         i% = GetResourceString (CUIDLL$, STR_README)
  513.         CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), "write " + MakePath(DEST$,"BIN\README.WRI"), "", cmoOverwrite
  514.  
  515.     rem Put a pointer to Pet CD files in WIN.INI (for uninstall)
  516.     rem -----------------------------------------------------------
  517.         CreateIniKeyValue "WIN.INI", "PetCD", "PetCDDir", DEST$, cmoNone
  518.  
  519.     rem Indicate install completed OK
  520.     rem -----------------------------
  521.         Install = INSTALLOK
  522.  
  523. END FUNCTION
  524.  
  525.  
  526. rem MakePath: Builds path from directory and file
  527. rem ---------------------------------------------
  528. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  529.  
  530.     IF szDir$ = "" THEN
  531.        MakePath = szFile$
  532.  
  533.     ELSEIF szFile$ = "" THEN
  534.        MakePath = szDir$
  535.  
  536.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  537.        MakePath = szDir$ + szFile$
  538.  
  539.     ELSE
  540.        MakePath = szDir$ + "\" + szFile$
  541.  
  542.     END IF
  543.  
  544. END FUNCTION
  545.  
  546.  
  547. rem Check for Older versions of the Quicktime For Windows components
  548. rem ---------------------------------------------------------------
  549. FUNCTION CheckForOld STATIC AS INTEGER
  550.  
  551.     sz$ = UIStartDlg(ENUDLL$, OLDMESS, "FModelessDlgProc", 0, "")
  552.  
  553. CheckForOld1:
  554.     cursor% = ShowWaitCursor()
  555.     OldFilePath$ = FindFileUsingFileOpen("qtim.dll")
  556.     RestoreCursor cursor%
  557.     IF (OldFilePath$ <> "") THEN
  558.         j% = RemoveOldQTFiles(OldFilePath$)
  559.         IF j% = FILES_REMOVED THEN
  560.             GOTO CheckForOld1
  561.         END IF
  562.     END IF
  563.  
  564. CheckForOld2:
  565.     cursor% = ShowWaitCursor()
  566.     OldFilePath$ = FindFileUsingFileOpen("qtimcmgr.dll")
  567.     RestoreCursor cursor%
  568.     IF (OldFilePath$ <> "") THEN
  569.         j% = RemoveOldQTFiles(OldFilePath$)
  570.         IF j% = FILES_REMOVED THEN
  571.             GOTO CheckForOld2
  572.         END IF
  573.     END IF
  574.  
  575.     GetLocalHardDrivesList "HardDrives"
  576.     NumDrives% = GetListLength("HardDrives")
  577.  
  578.     IF (NUMDRIVES% > 0) THEN
  579.         FOR i% = 1 TO NumDrives% STEP 1
  580.             CurrentDrive$ = GetListItem("HardDrives",i%) + ":\"
  581.             CheckForOld3:
  582.                 cursor% = ShowWaitCursor()
  583.                 OldFilePath$ = FindFileInTree("qtim.dll",CurrentDrive$)
  584.                 RestoreCursor cursor%
  585.                 IF (OldFilePath$ <> "") THEN
  586.                     j% = RemoveOldQTFiles(OldFilePath$)
  587.                     IF j% = FILES_REMOVED THEN
  588.                         GOTO CheckForOld3
  589.                     END IF
  590.                 END IF
  591.  
  592.             CheckForOld4:
  593.                 cursor% = ShowWaitCursor()
  594.                 OldFilePath$ = FindFileInTree("qtimcmgr.dll",CurrentDrive$)
  595.                 RestoreCursor cursor%
  596.                 IF (OldFilePath$ <> "") THEN
  597.                     j% = RemoveOldQTFiles(OldFilePath$)
  598.                     IF j% = FILES_REMOVED THEN
  599.                         GOTO CheckForOld4
  600.                     END IF
  601.                 END IF
  602.         NEXT i%
  603.     END IF
  604.  
  605.     UIPOP 1
  606.  
  607. END FUNCTION
  608.  
  609. FUNCTION RemoveOldQTFiles (FilePath$) STATIC AS INTEGER
  610.  
  611.     RemoveOldQTFiles = FILES_SKIPPED
  612.  
  613.     SPLITPATH FilePath$, drv$, dir$, filename$, ext$
  614.     DeadPath$ = drv$ + dir$
  615.  
  616.   rem check version resources if they exist
  617.       szVersion$ = GetVersionOfFile(FilePath$)
  618.  
  619.   rem dialog choices are Remove,Skip ("Continue","Back" buttons)
  620.     SetSymbolValue "EditTextIn", "Found Version [" + szVersion$ + "] on " + DeadPath$
  621.     sz$ = UIStartDlg(ENUDLL$, NUKEOLD, "FEditDlgProc", 0, "")
  622.     UIPop 1
  623.  
  624.     IF sz$ = "BACK" THEN
  625.         EXIT FUNCTION
  626.     END IF
  627.  
  628.     IF sz$ <> "CONTINUE" THEN
  629.         EXIT FUNCTION
  630.     END IF
  631.  
  632.     rem all versions
  633.         RemoveFile MakePath(DeadPath$, "qtim.dll"), cmoForce
  634.         RemoveFile MakePath(DeadPath$, "qtimcmgr.dll"), cmoForce
  635.     rem version 1.0.0
  636.         RemoveFile MakePath(DeadPath$, "qcmc.dll"), cmoForce
  637.         RemoveFile MakePath(DeadPath$, "qtjpeg.dll"), cmoForce
  638.         RemoveFile MakePath(DeadPath$, "qtraw.dll"), cmoForce
  639.         RemoveFile MakePath(DeadPath$, "qtsmc.dll"), cmoForce
  640.         RemoveFile MakePath(DeadPath$, "qtrpza.dll"), cmoForce
  641.         RemoveFile MakePath(DeadPath$, "qtrle.dll"), cmoForce
  642.         RemoveFile MakePath(DeadPath$, "qtcvid.dll"), cmoForce
  643.         RemoveFile MakePath(DeadPath$, "qtrt21.dll"), cmoForce
  644.         RemoveFile MakePath(DeadPath$, "qtvhdw.dll"), cmoForce
  645.     rem version 1.1.x and later
  646.         RemoveFile MakePath(DeadPath$, "mciqtw.drv"), cmoForce
  647.         RemoveFile MakePath(DeadPath$, "qcmc.qtc"), cmoForce
  648.         RemoveFile MakePath(DeadPath$, "qtjpeg.qtc"), cmoForce
  649.         RemoveFile MakePath(DeadPath$, "qtraw.qtc"), cmoForce
  650.         RemoveFile MakePath(DeadPath$, "qtsmc.qtc"), cmoForce
  651.         RemoveFile MakePath(DeadPath$, "qtrpza.qtc"), cmoForce
  652.         RemoveFile MakePath(DeadPath$, "qtrle.qtc"), cmoForce
  653.         RemoveFile MakePath(DeadPath$, "qtcvid.qtc"), cmoForce
  654.         RemoveFile MakePath(DeadPath$, "qtrt21.qtc"), cmoForce
  655.         RemoveFile MakePath(DeadPath$, "navg.qtc"), cmoForce
  656.         RemoveFile MakePath(DeadPath$, "qtiv31.qtc"), cmoForce
  657.     rem version 1.9 and later
  658.         RemoveFile MakePath(DeadPath$, "qtvhdw.qtc"), cmoForce
  659.         RemoveFile MakePath(DeadPath$, "qtyvu9.qtc"), cmoForce
  660.         RemoveFile MakePath(DeadPath$, "qtmsvc.qtc"), cmoForce
  661.         RemoveFile MakePath(DeadPath$, "qtiv32.qtc"), cmoForce
  662.         RemoveFile MakePath(DeadPath$, "qtiyvu9.qtc"), cmoForce
  663.         RemoveFile MakePath(DeadPath$, "qtvhdw.qtc"), cmoForce
  664.         RemoveFile MakePath(DeadPath$, "dhio_dh.qtc"), cmoForce
  665.         RemoveFile MakePath(DeadPath$, "reelmgic.qtc"), cmoForce
  666.  
  667.     RemoveOldQTFiles = FILES_REMOVED
  668.  
  669. END FUNCTION
  670.  
  671. '$IFDEF DEBUG
  672.        IF DoesFileExist(MakePath(DEST$, "bin\qtim.dll"), femExists) = 1 THEN
  673.           szError$ = MakePath(DEST$, "BIN")
  674.           i% = GetResourceString (ENUDLL$, STR_MSG1)
  675.           szError$ = szError$ + GetSymbolValue ("ResourceString")
  676.           i% = GetQTWVersion(MakePath(DEST$, "bin\qtim.dll"))
  677.           szVersion$ = GetSymbolValue ("VersionString")
  678.           szError$ = szError$ + szVersion$
  679.           i% = GetResourceString (ENUDLL$, STR_MSG2)
  680.           szError$ = szError$ + GetSymbolValue ("ResourceString")
  681.           i% = GetResourceString (ENUDLL$, STR_WARNING)
  682.           szCaption$ = GetSymbolValue ("ResourceString")
  683.           i% = DoMsgBox(szError$, szCaption$, 20)
  684.           UIPop 1
  685.           IF i% = 7 THEN
  686.              GOTO GETPATHL1
  687.           END IF
  688.           IF szVersion$ = "1.0.0" THEN
  689.              i% = GetResourceString (ENUDLL$, STR_MSG3)
  690.              szError$ = GetSymbolValue ("ResourceString")
  691.              i% = GetResourceString (ENUDLL$, STR_WARNING)
  692.              szCaption$ = GetSymbolValue ("ResourceString")
  693.              i% = DoMsgBox(szError$, szCaption$, 20)
  694.        END IF
  695. '$ENDIF
  696.  
  697.  
  698. FUNCTION CheckForSpace (DrivePath$) STATIC AS INTEGER
  699.     CheckForSpace = 0
  700.  
  701.     rem Check that we have enough free space to perform the install
  702.     rem -----------------------------------------------------------
  703.     ListSym$ = APPNEEDS$
  704.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  705.  
  706.     drive$ = MID$(DrivePath$, 1, 1)
  707.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  708.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  709.     free& = GetFreeSpaceForDrive(drive$)
  710.  
  711.     IF cost& >= free& THEN
  712.         CheckForSpace = NOSPACE
  713.     END IF
  714. END FUNCTION
  715.  
  716.  
  717. rem Check for Older versions of PETCD EXEs for possible smoking
  718. rem -----------------------------------------------------------
  719. FUNCTION CheckForOldPETCD1 STATIC AS INTEGER
  720.  
  721.     cursor% = ShowWaitCursor()
  722.  
  723.     GetLocalHardDrivesList "HardDrives"
  724.     NumDrives% = GetListLength("HardDrives")
  725.  
  726.     IF (NUMDRIVES% > 0) THEN
  727.         FOR i% = 1 TO NumDrives% STEP 1
  728.             CurrentDrive$ = GetListItem("HardDrives",i%) + ":\"
  729.  
  730.             rem Find Old PETCD1.EXE and smoke it
  731.             rem --------------------------------
  732.                 OldFilePath$ = ""
  733.                 OldFilePath$ = FindFileInTree("PETCD1.EXE",CurrentDrive$)
  734.                 IF (OldFilePath$ <> "") THEN
  735.                     RemoveFile OldFilePath$, cmoForce
  736.                 END IF
  737.         NEXT i%
  738.     END IF
  739.  
  740.     RestoreCursor cursor%
  741.  
  742. END FUNCTION
  743.  
  744.  
  745.  
  746. rem Check for Older versions of PHI EXEs for possible replacement
  747. rem -------------------------------------------------------------
  748. FUNCTION CheckForOldPHI STATIC AS INTEGER
  749.  
  750.     cursor% = ShowWaitCursor()
  751.  
  752.     GetLocalHardDrivesList "HardDrives"
  753.     NumDrives% = GetListLength("HardDrives")
  754.  
  755.     IF (NUMDRIVES% > 0) THEN
  756.         FOR i% = 1 TO NumDrives% STEP 1
  757.             CurrentDrive$ = GetListItem("HardDrives",i%) + ":\"
  758.  
  759.             rem Find Old PHI1.EXE
  760.             rem -----------------
  761.                 OldFilePath$ = ""
  762.                 OldFilePath$ = FindFileInTree("PHI1.EXE",CurrentDrive$)
  763.                 IF (OldFilePath$ <> "") THEN
  764.                     SPLITPATH OldFilePath$, drv$, dir$, filename$, ext$
  765.                     NewFilePath$ = drv$ + dir$
  766.                     AddSectionFilesToCopyList "PHI1", SOURCE$, NewFilePath$
  767.                 END IF
  768.  
  769.             rem Find Old PHI2.EXE
  770.             rem -----------------
  771.                 OldFilePath$ = ""
  772.                 OldFilePath$ = FindFileInTree("PHI2.EXE",CurrentDrive$)
  773.                 IF (OldFilePath$ <> "") THEN
  774.                     SPLITPATH OldFilePath$, drv$, dir$, filename$, ext$
  775.                     NewFilePath$ = drv$ + dir$
  776.                     AddSectionFilesToCopyList "PHI2", SOURCE$, NewFilePath$
  777.                 END IF
  778.  
  779.             rem Find Old PHI3.EXE
  780.             rem -----------------
  781.                 OldFilePath$ = ""
  782.                 OldFilePath$ = FindFileInTree("PHI3.EXE",CurrentDrive$)
  783.                 IF (OldFilePath$ <> "") THEN
  784.                     SPLITPATH OldFilePath$, drv$, dir$, filename$, ext$
  785.                     NewFilePath$ = drv$ + dir$
  786.                     AddSectionFilesToCopyList "PHI3", SOURCE$, NewFilePath$
  787.                 END IF
  788.  
  789.         NEXT i%
  790.     END IF
  791.  
  792.     CopyFilesInCopyList    
  793.  
  794.     RestoreCursor cursor%
  795.  
  796. END FUNCTION